import App from './App'

// #ifdef H5
// H5环境兼容性修复 - 在最早期加载
import './common/h5-fix.js';
// #endif

import core from './xilu/core.js';

import util from './xilu/util.js';
import chatIM from './xilu/websocket.js';
import {
	hexToRgba
} from './xilu/colorConvert.js';
// 挂载
Vue.prototype.$core = core; //core
Vue.prototype.$util = util; //util
Vue.prototype.$chatIM = chatIM; //util


/**
 * @param search
 * @param replace
 * @param str
 */
Vue.prototype.strReplace = function(search, replace, str) {
	if (!str)
		return '';
	search = new RegExp(search, 'g');
	return str.replace(search, replace);
};

Vue.prototype.cdnurl = function(url, default_file = '', watermark = false) {
	if (url && url.indexOf("http") != 0 && url.indexOf("https") != 0) {
		url = getApp().globalData.storageBaseUri + url
		return url
	} else if (url) {
		return url
	} else if (default_file) {
		return default_file;
	} else {
		return getApp().globalData.config.logo
	}
}

// 统一处理图片URL，确保都使用 https://admin.mosizp.cn 域名
Vue.prototype.formatImageUrl = function(url) {
	if (!url) return '';

	// 如果已经是完整的 https://admin.mosizp.cn 开头的URL，直接返回
	if (url.indexOf('https://admin.mosizp.cn') === 0) {
		return url;
	}

	// 如果是其他域名的URL，替换域名
	if (url.indexOf('http://') === 0 || url.indexOf('https://') === 0) {
		// 提取路径部分
		const urlObj = new URL(url);
		return 'https://admin.mosizp.cn' + urlObj.pathname + urlObj.search + urlObj.hash;
	}

	// 如果是相对路径，直接拼接
	if (url.indexOf('/') === 0) {
		return 'https://admin.mosizp.cn' + url;
	}

	// 其他情况，加上斜杠拼接
	return 'https://admin.mosizp.cn/' + url;
}

// 递归处理对象中的所有图片URL
Vue.prototype.processImageUrls = function(obj) {
	if (!obj) return obj;

	// 图片字段名列表（可以根据实际情况添加更多）
	const imageFields = [
		'image', 'images', 'img', 'imgs', 'avatar', 'avatars',
		'pic', 'pics', 'picture', 'pictures', 'photo', 'photos',
		'thumb', 'thumbnail', 'cover', 'icon', 'logo', 'banner',
		'background', 'bg', 'poster', 'head_img', 'head_pic',
		'file', 'files', 'attachment', 'attachments'
	];

	// 如果是字符串，检查是否是图片URL
	if (typeof obj === 'string') {
		// 检查是否是图片文件
		if (/\.(jpg|jpeg|png|gif|webp|svg|ico|bmp)$/i.test(obj)) {
			return this.formatImageUrl(obj);
		}
		return obj;
	}

	// 如果是数组，递归处理每个元素
	if (Array.isArray(obj)) {
		return obj.map(item => this.processImageUrls(item));
	}

	// 如果是对象，递归处理每个属性
	if (typeof obj === 'object' && obj !== null) {
		const result = {};
		for (let key in obj) {
			if (obj.hasOwnProperty(key)) {
				// 检查是否是图片相关字段
				const keyLower = key.toLowerCase();
				const isImageField = imageFields.some(field => keyLower.includes(field));

				if (isImageField && typeof obj[key] === 'string') {
					// 处理单个图片URL
					result[key] = this.formatImageUrl(obj[key]);
				} else if (isImageField && Array.isArray(obj[key])) {
					// 处理图片URL数组
					result[key] = obj[key].map(url => typeof url === 'string' ? this.formatImageUrl(url) : url);
				} else {
					// 递归处理其他字段
					result[key] = this.processImageUrls(obj[key]);
				}
			}
		}
		return result;
	}

	return obj;
}
Vue.prototype.formatDatetime = function(date, fmt) { //author: meizz
	if (!date) {
		return "";
	}
	if (!(date instanceof Date)) {
		if (/^\d+$/.test(date)) {
			date = (date + "").length > 10 ? date : date * 1000;
			date = new Date(parseInt(date));
		} else {
			date = new Date(date.replace(/-/g, '/'));
		}
	}
	var o = {
		"m+": date.getMonth() + 1, //月份
		"d+": date.getDate(), //日
		"h+": date.getHours(), //小时
		"i+": date.getMinutes(), //分
		"s+": date.getSeconds(), //秒
		"q+": Math.floor((date.getMonth() + 3) / 3), //季度
		"S": date.getMilliseconds() //毫秒
	};
	var yearMatch = fmt.match(/(y+)/);
	if (yearMatch) {
		fmt = fmt.replace(yearMatch[0], (date.getFullYear() + "").substr(4 - yearMatch[0].length));
	}
	for (var k in o) {
		var match = fmt.match(new RegExp("(" + k + ")"));
		if (match)
			fmt = fmt.replace(match[0], (match[0].length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k])
				.length)));
	}
	return fmt;
};

Vue.prototype.inArray = function(value, array) {
	return array ? array.indexOf(value) >= 0 : false;
};
Vue.prototype.getListItemById = function(list, id) {
	if (!list || id == undefined || id === '')
		return null;
	for (var i = 0; i < list.length; i++) {
		if (list[i].id == id) {
			return list[i];
		}
	}
	return null;
};
Vue.prototype.getListItemAttrById = function(list, id, attrName, defaultValue = '') {
	var item = this.getListItemById(list, id);
	if (item && item[attrName]) {
		return item[attrName];
	}
	return defaultValue;
};
Vue.prototype.primarySize = function() {
	const primarySize = 'primary_' + getApp()?.globalData?.primary;
	return primarySize;
};
Vue.prototype.primaryColor = function() {
	let primarySize = '#2A79F2';
	if (getApp()?.globalData?.primary == 'blue') {
		primarySize = '#2A79F2';
	} else if (getApp()?.globalData?.primary == 'orange') {
		primarySize = '#2FC971'
	}
	return primarySize;
};
Vue.prototype.primaryColorOpacity1 = function() {
	const primarySize = hexToRgba(getApp()?.globalData?.color, 0.1);
	return primarySize;
};
Vue.prototype.primaryColorOpacity5 = function() {
	const primarySize = hexToRgba(getApp()?.globalData?.color, 0.5);
	return primarySize;
};
Vue.prototype.iconPath = function(url) {
	const primary = getApp()?.globalData?.primary;
	return 'https://admin.mosizp.cn/static/' + primary + '/' + url;
}

// 页面跳转拦截器
import userCheck from './xilu/userCheck.js';

uni.addInterceptor('navigateTo', {
	invoke(e) {
		// 排除用户信息完善页面，避免循环跳转
		if (e.url.indexOf('/pages/company/mine_info') === -1) {
			// 检查用户信息是否完整
			const app = getApp();
			if (app && userCheck.checkUserInfo(app)) {
				// 记录原始跳转目标
				const targetUrl = e.url;
				// 修改跳转到用户信息完善页面
				e.url = '/pages/company/mine_info?from=' + encodeURIComponent(targetUrl);
			}
		}
		return e
	},
	success(e) {
		// console.log('navigateTo success:' + JSON.stringify(e))
	},
	fail(e) {
		// console.log('navigateTo fail:' + JSON.stringify(e))
	},
	complete(e) {
		// console.log('navigateTo complete:' + JSON.stringify(e))
	}
})
// 全局混入：主题管理

// #ifndef VUE3
import Vue from 'vue'
import './uni.promisify.adaptor'
Vue.config.productionTip = false
import uView from '@/uni_modules/uview-ui'
Vue.use(uView)
import Footer from '@/components/footer/footer.vue';
Vue.component('Footer', Footer)
App.mpType = 'app'
const app = new Vue({
	...App
})
app.$mount()
// #endif

// #ifdef VUE3
import {
	createSSRApp
} from 'vue'
export function createApp() {
	const app = createSSRApp(App)
	return {
		app
	}
}
// #endif